﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using GerTestes.Entity;
using System.Web.Security;
using System.Drawing;
using System.IO;
using GerTestes.Utilitarios;
using System.Data;

namespace GerTestes.Cadastros
{
    public partial class CadastroUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregarGridUsuarios();
                carregarRegras();
                carregarNiveis();
                TxtPesquisaGrid.Attributes.Add("onkeypress", "return clickButton(event,'" + TxtPesquisaGrid.ClientID + "')");
            }
        }

        private void carregarRegras()
        {
            ddlRegra.Items.Clear();
            ddlRegra.DataTextField = "RoleName";
            ddlRegra.DataValueField = "RoleName";
            ddlRegra.DataSource = ControlClass.CNRegras.getRegras();
            ddlRegra.DataBind();
        }

        private void carregarNiveis()
        {
            ddlNivel.Items.Clear();
            ddlNivel.DataTextField = "NIVEL";
            ddlNivel.DataValueField = "ID_NIVEL";
            ddlNivel.DataSource = ControlClass.CNNiveis.getNiveis();
            ddlNivel.DataBind();
        }

        private void carregarGridUsuarios()
        {
            gvwUsuarios.DataSource = ControlClass.CNUsuarios.getUsuarios(TxtPesquisaGrid.Text);
            gvwUsuarios.DataBind();
        }

        protected void gvwUsuarios_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            Usuario usu = new Usuario();
            int index = int.Parse((String)e.CommandArgument);
            usu.Codigo = Convert.ToInt32(gvwUsuarios.DataKeys[index]["ID_USUARIO"].ToString());
            usu = ControlClass.CNUsuarios.getDadosUsuario(usu.Codigo);
            if (e.CommandName == "Alterar")
            {
                TxtUsuario.Text = usu.Nome;
                TxtEmail.Text = usu.Email;
                ddlNivel.SelectedValue = usu.IdNivel.ToString();
                ddlRegra.SelectedValue = Roles.GetRolesForUser(usu.Nome)[0].ToString();

                ddlRegra.Enabled = false;
                TxtUsuario.Enabled = false;
                TxtUsuario.BackColor = Color.Silver;

                ViewState["ID_USUARIO"] = usu.Codigo;
                lblDescricaoOnlEdicao.Text = "Alteração Usuário";
                pnlConsulta.Enabled = false;
                pnlEdicao.Visible = true;
                btnConfirmar.CommandName = "Alterar";
            }
            else if (e.CommandName == "Excluir")
            {
                if (ControlClass.CNUsuarios.excluirUsuario(usu))
                {
                    carregarGridUsuarios();
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + Mensagens.obterMsg((int)EnumGerTestes.Mensagem.SucessoExcluir, "") + "', function() {});", true);
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + Mensagens.obterMsg((int)EnumGerTestes.Mensagem.ErroSimples, "") + "', function() {});", true);
                }
            }
        }

        protected void gvwUsuarios_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgExcluir");
                button.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwUsuarios_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            #region Configurando Alert de Confirmação
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Passando por todas as linhas
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
            #endregion
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            lblDescricaoOnlEdicao.Text = "Inclusão Usuário";
            pnlConsulta.Enabled = false;
            pnlEdicao.Visible = true;
            ThiagoSoftware.Upgrade.UtilForms.LimparCampos(pnlEdicao);
            carregarRegras();
            carregarNiveis();
            btnConfirmar.CommandName = "Incluir";
            ddlRegra.Enabled = true;
            TxtUsuario.Enabled = true;
            TxtUsuario.BackColor = Color.White;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlEdicao.Visible = false;
            pnlConsulta.Enabled = true;
            ThiagoSoftware.Upgrade.UtilForms.LimparCampos(pnlEdicao);
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                if (fupld.PostedFile != null || !string.IsNullOrEmpty(fupld.PostedFile.FileName) || fupld.PostedFile.InputStream != null)
                {
                    //'obtem a extensão do arquivo enviado  
                    string extensao = Path.GetExtension(fupld.PostedFile.FileName).ToLower();
                    string tipoArquivo = null;
                    // 'efetua a validação do arquivo
                    switch (extensao)
                    {
                        case ".gif":
                            tipoArquivo = "image/gif";
                            break;
                        case ".jpg":
                        case ".jpeg":
                        case ".jpe":
                            tipoArquivo = "image/jpeg";
                            break;
                        default:
                            throw new Exception("Arquivo no formato inválido!");
                            break;
                    }
                }

                Usuario usu = new Usuario();
                usu.Nome = TxtUsuario.Text;
                usu.Email = TxtEmail.Text;
                usu.Situacao = "A";
                usu.IdNivel = Convert.ToInt32(ddlNivel.SelectedValue);
                string pRegra = ddlRegra.SelectedValue.ToString();
                if (fupld.PostedFile == null || string.IsNullOrEmpty(fupld.PostedFile.FileName) || fupld.PostedFile.InputStream == null)
                    usu.Imagem = null;
                else
                {
                    byte[] imageBytes = new byte[fupld.PostedFile.InputStream.Length + 1];
                    fupld.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length);
                    usu.Imagem = imageBytes;
                }
                if (btnConfirmar.CommandName == "Incluir")
                {
                    if (ControlClass.CNUsuarios.inserirUsuario(usu, pRegra))
                    {
                        pnlEdicao.Visible = false;
                        pnlConsulta.Enabled = true;
                        carregarGridUsuarios();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + Mensagens.obterMsg((int)EnumGerTestes.Mensagem.SucessoInserir, "") + "', function() {});", true);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + Mensagens.obterMsg((int)EnumGerTestes.Mensagem.ErroSimples, "") + "', function() {});", true);
                    }
                }
                else if (btnConfirmar.CommandName == "Alterar")
                {
                    usu.Codigo = Convert.ToInt32(ViewState["ID_USUARIO"]);
                    if (ControlClass.CNUsuarios.alterarUsuario(usu))
                    {
                        pnlEdicao.Visible = false;
                        pnlConsulta.Enabled = true;
                        carregarGridUsuarios();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + Mensagens.obterMsg((int)EnumGerTestes.Mensagem.SucessoAlterar, "") + "', function() {});", true);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + Mensagens.obterMsg((int)EnumGerTestes.Mensagem.ErroSimples, "") + "', function() {});", true);
                    }
                }

            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Arquivo no formato inválido!"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + ex.Message.ToString() + "', function() {});", true);
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('" + Mensagens.obterMsg((int)EnumGerTestes.Mensagem.Erro, "") + "', function() {});", true);
            }
        }

        protected void TxtPesquisa_TextChanged(object sender, EventArgs e)
        {
            carregarGridUsuarios();
        }
    }
}